云平台性能优化实践

云主机CPU性能优化实践

  • 云主机CPU数量需根据业务需求设定,建议单个云主机的CPU数量不超过单个NUMA核心的CPU数,以保障高性能场景CPU对本地内存的高速访问。

    • 例如,单颗物理CPU的核心数为20,超线程后为40个,实践建议云主机CPU上限控制在40个以下。
    • 对CPU数量有强需求的场景,可以联合vNUMA将CPU对内存的访问映射到本地物理CPU对本地内存的访问。
    • 云主机的CPU数量并非越高越好,数量不合理会导致CPU异常使用率高。
  • 关闭物理机超线程,单个云主机的CPU上限不超过单个NUMA节点CPU的数量。

  • 云主机CPU模式:云主机CPU模式可以选择None(默认)、host-model、host-passthrough、某一特定 CPU 型号。

    • None模式:默认模式,云主机CPU采用Qemu模拟的CPU,性能较差,但兼容性最好。
    • host-model模式:云主机的 CPU 类型将与物理机的 CPU 类型相符,例如:都显示为 Haswell 的 Intel CPU,此模式支持较多的指令集,兼容性中等。
    • host-passthrough模式:云主机的CPU特性与物理机的CPU特性完全一致,支持扩展页表、大页内存以及嵌套虚拟化等。此模式CPU指令集支持更为全面,性能较好,但兼容性较差。在线迁移要求CPU型号完全一致才能迁移。
    • 实践中,部分数据库业务必须设置host-passthrough模式,以满足应用对CPU指令集的要求。针对底层物理机采用较低版本的操作系统,云主机采用高版本的系统,在使用host-passthrough模式下,在线修改CPU内存规格可能会导致系统宕机,需关机修改。
  • 云主机CPU绑定:将云主机的vCPU绑定到物理机的pCPU上,CPU绑定建议将同一个云主机上的所有CPU绑定在同一个NUMA NODE上,NUMA的分布信息,可以在物理机使用numactl --hardware查看。物理机的CPU0负责中断处理、上下文切换等任务,实践中一般不将pCPU0绑定给云主机使用。

  • 云主机vNUMA:基于CPU绑定,透传物理机的NUMA拓扑关系到云主机的vNUMA拓扑,实现云主机的多CPU优先访问vNUMA节点的本地内存,提升云主机性能。
  • 云主机Emulator Pin:将云主机中除vCPU和IO线程外的其他线程与物理机pCPU进行绑定,使云主机相关线程只运行在对应的pCPU上。针对单台物理机运行多台云主机业务场景,如果每台云主机运行了不同的业务,会造成不同程度的资源占用。Emulator Pin通过将云主机QEMU主线程与pCPU绑定可实现不同云主机主要服务进程隔离,保证系统性能相对稳定。
  • 资源优先级设定:可以为资源要求、性能要求高的云主机设置高优先级,使该云主机具备更高的资源抢夺能力,在物理机负载率过高出现资源竞争时,优先保证资源优先级为高的云主机的资源使用。建议仅对核心业务云主机设置高优先级。
  • 物理机设置isolcpus:将运行业务云主机的相关物理CPU预留,将其隔离出来,底层物理机操作系统不可使用,单独配置给业务云主机使用。需要在物理机的grub中配置isolcpus选项,例如 "isolcpus=16-31",表示隔离使用物理机16-31 CPU,特别提供给云主机使用,底层物理机操作系统不可使用。
  • 系统外设配置:建议删除云主机不必要的外设,例如更多的CD-ROM虚拟光驱设备会占用更多的资源,删除不必要的CD-ROM会对系统性能有一定的提升。
  • 物理机CPU C-states:物理机BIOS中的C states属于ACPI节能省电机制,但在实践中,在负载较高的情况下,C-states不同层级切换过程中会导致系统的不稳定,严重时会导致系统意外宕机,最佳实践建议关闭物理机CPU C states。
  • 物理机CPU负载:性能场景下,物理机的CPU负载使用率建议保持在70%以下,内存使用率保持在80%以下,留足冗余,以保持在性能场景下的持续稳定运行。
  • 物理机系统内核:性能场景下,物理机内核版本越高,支持的特性越多,对系统底层的性能优化会越明显,针对特别性能需求场景,可以根据情况升级底层物理机系统内核。

云主机内存性能优化实践

  • 内存EPT:Intel扩展页表,默认开启。最佳实践确保内存EPT技术开启,以保障内存页面映射的加速访问。
  • 内存KSM:内存同页合并,默认开启。可以将具有相同内容的物理主存页面合并,减少页面冗余,可以提供更多的物理内存供云主机使用。但在性能场景下建议关闭,以保障内存性能。
  • 内存大页:使用2M的大页内存,替换默认的4K页面,减少云主机页面缓存和缺页中断的切换,提高运行性能。注意:大页内存需配合物理机的保留内存使用,为操作系统相关的基础业务保留必要的内存。
  • SWAP分区:SWAP分区会在内存容量不足的情况下,借用硬盘的容量临时作为内存使用,性能场景不建议配置SWAP分区。

云主机磁盘性能优化实践

  • Virtio_blk磁盘:Virtio提供了一种前后端IO框架,通过接口来加速IO访问。目前主流的Linux系统已集成了Virtio驱动,Windows系统需要额外安装Virtio驱动,可以通过安装云平台的性能优化工具或独立安装Virtio驱动来加速磁盘性能。系统盘和数据盘优先建议采用Virtio_blk类型磁盘。使用Virtio类型设备,需提前将平台类型设置为Linux或Windows_virtio类型。
  • Virtio驱动:Windows云主机建议使用最新的Windows Virtio驱动,以提升IO性能。
  • 内核AIO:在QEMU存储驱动中使用内核异步IO,可以实现IO的异步时间非阻塞。应用通过向内核发出IO请求,无须等待I/O事件处理,即可执行其他任务。I/O操作执行完毕,内核会通知应用完成操作,提升IO性能。在本地存储、NFS存储、SAN存储的实现建议开启内核AIO。在Ceph存储层面,内核AIO选项对性能提升作用不大。

云主机网络性能优化实践

  • vhost_net网卡:采用vhost_net网卡,在物理机的内核空间运行后端框架,比Qemu实现的后端框架性能更佳,云平台默认已启用vhost_net网卡。前提是需提前将平台类型设置为Linux或Windows_virtio类型。
  • 网卡多队列:支持Virtio类型的网卡流量分配给多个CPU,并行处理中断。网卡多队列的设置需要网卡要支持多队列,在设置网卡队列数时,不能超过网卡支持的最大的队列数。同时注意,需要重启云主机后生效。
  • Zero Copy开关:开启后集群内所有物理机支持Zero Copy功能,可减少数据在内核态和用户态之间的拷贝次数,降低CPU占用时间,有效提升云主机Virtio网卡的性能。设置“Zero Copy”后,需重启物理机生效。

VPC路由器性能优化实践

  • VPC网络作为常用的私有网络,VPC路由器承载着整个VPC网络的流量转发的工作,对VPC的性能、可用性都有极高的要求。如果性能不达预期,网络中的云主机的网络性能也会相对下降。

负载均衡场景性能优化实践

  • 监听器参数优化

    • 最大连接数:一般设置成200W即可。设置监听器最大并发请求连接数,一般连接数最大,支撑的QPS越高。
    • 进程数量:一般是比路由器CPU数量少2最佳。HAProxy进程的数量,默认为 1。使用多个进程可提高监听器的性能与监听数据的并发量,但同时可能会占用更多内存,并在一定程度上影响监控数据的准确性。
    • httpMode:选择http-keep-alive。HAProxy进程为通过的每个请求和响应处理 HTTP 协议。从 http-keep-alive、http-server-close、http-tunnel、httpclose、forceclose 中进行选择。
    • 关闭健康检查: 修改HAProxy进程配置文件,将每一个后端server的“check port 80 inter 5s rise 2 fall 2”删除,即关闭健康检查。
    • 调度算法: 将请求调度到哪台后端服务器的算法。修改HAProxy进程配置文件,将balance roundrobin修改为balance static-rr ,同理,修改后需重启haproxy进程
  • VPC路由器优化

    • 关闭路由器公网口的 QoS。
    • 关闭多公网的源进源出。
    • 调大port range。
    • 在4.0.0以后版本,默认开启的优化手段。
      • 文件描述符大小:默认设置为 20971520。
      • conntrack table 的大小:默认设置为22740992。

results matching ""

    No results matching ""